package com.xiaojie.parse.model;

import com.xiaojie.exception.RelOtherSystemException;
import com.xiaojie.ext.RelSystem;
import com.xiaojie.toolkits.EIDCustSpringContextUtil;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.Map;

/**
 * @author liaoke
 * @date 2021/11/2
 * 其他相关系统配置
 **/
@Data
public class RelOtherSystem {

    /**
     * 系统地址
     */
    private String url;

    /**
     * 系统导出接口
     */
    private String exportApi;
    /**
     * 系统导入接口
     */
    private String importApi;

    /**
     * 查询参数 <参数名,关联表list>
     */
    private Map<String, List<RefTable>> params;


    /**
     * 获取导入api，配置文件如果未配置则调用扩展到获取
     *
     * @param systemName
     * @Author: wangye
     * @Date: 2022/2/17 13:36
     * @return:
     **/
    public String getImportUrl(String systemName) {
        return getSystemApi(systemName, ApiType.IMPORT);
    }

    /**
     * 获取服务导出api，配置文件如果未配置则调用扩展到获取
     *
     * @param systemName
     * @Author: wangye
     * @Date: 2022/2/17 13:43
     * @return:
     **/
    public String getExportUrl(String systemName) {
        return getSystemApi(systemName, ApiType.EXPORT);
    }


    private String getSystemApi(String systemName, ApiType apiType) {
        RelSystem relSystme = getRelSystme();
        url = StringUtils.isNotBlank(url) ? url : relSystme.getUrl(systemName);
        String api = null;
        if (apiType == ApiType.IMPORT) {
            api = StringUtils.isNotBlank(importApi) ? importApi : relSystme.getImportApi(systemName);
        } else if (apiType == ApiType.EXPORT) {
            api = StringUtils.isNotBlank(exportApi) ? exportApi : relSystme.getExportApi(systemName);
        }
        if (StringUtils.isBlank(url) || StringUtils.isBlank(api)) {
            throw new RelOtherSystemException(String.format("%s %s url、api未配置", systemName, apiType));
        }
        return url + api;
    }

    private RelSystem getRelSystme() {
        return EIDCustSpringContextUtil.getBean(RelSystem.class);
    }


    private enum ApiType {
        IMPORT, EXPORT
    }


}
